
package com.example.paper.common.datam.migrate.job;

import com.example.paper.common.datam.migrate.processor.Processor;
import com.example.paper.common.datam.migrate.reader.Reader;
import com.example.paper.common.datam.migrate.writer.Writer;

import java.util.Map;

/**
 * 描述.
 *
 * @author Long Fengfan, 2022年10月17日

 */
public abstract class BaseJob<R,W> {

    /**
     * job执行方法，自行组装执行processor的业务逻辑
     * 常规用法是在job中查询好要移植的多个文件列表，循环执行，将单个的文件参数透传给processor进行数据移植，
     * processor自定义好回滚单个文件的方法。job中执行完一个文件，可以自定义执行额外的工作，如：标记已完成等
     * @param jobParams
     */
    public void execute(Map<String, Object> jobParams) {
        try {
            doJob(jobParams);
        }finally {
            TraceIdHolder.removeJobId();
            TraceIdHolder.removeProcessId();
        }
    }

    public abstract void doJob(Map<String, Object> jobParams);

    public abstract Reader<R>  getReader();
    public abstract Processor<R,W> getProcessor();
    public abstract Writer<W> getWriter();


}
